From 4788f8884005158e8c1328d7eced1b61ba0302e3 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Timm=20B=C3=A4der?= Date: Thu, 19 Dec 2019 09:15:13 +0100 Subject: [PATCH] snapshot: Repeat color nodes by creating a larger color node --- gtk/gtksnapshot.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c index a7f55e6bbb..c87ba493f9 100644 --- a/gtk/gtksnapshot.c +++ b/gtk/gtksnapshot.c @@ -547,13 +547,25 @@ gtk_snapshot_collect_repeat (GtkSnapshot *snapshot, guint n_nodes) { GskRenderNode *node, *repeat_node; - graphene_rect_t *bounds = &state->data.repeat.bounds; - graphene_rect_t *child_bounds = &state->data.repeat.child_bounds; + const graphene_rect_t *bounds = &state->data.repeat.bounds; + const graphene_rect_t *child_bounds = &state->data.repeat.child_bounds; node = gtk_snapshot_collect_default (snapshot, state, nodes, n_nodes); if (node == NULL) return NULL; + if (gsk_render_node_get_node_type (node) == GSK_COLOR_NODE && + graphene_rect_equal (child_bounds, &node->bounds)) + { + /* Repeating a color node entirely is pretty easy by just increasing + * the size of the color node. */ + GskRenderNode *color_node = gsk_color_node_new (gsk_color_node_peek_color (node), bounds); + + gsk_render_node_unref (node); + + return color_node; + } + repeat_node = gsk_repeat_node_new (bounds, node, child_bounds->size.width > 0 ? child_bounds : NULL); -- 2.30.2